home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / BG_SRC.ZIP / BG.H < prev    next >
Text File  |  1995-03-25  |  23KB  |  603 lines

  1. /*
  2.  *
  3.  *
  4.  *   B  G  .  H , main include file for BG.C, 31st December 1993
  5.  *
  6.  *
  7.  */
  8.  
  9. #define VER_STR "VERSION 2.31"
  10.  
  11. /* Version numbers and dates:
  12.     1.00 25th April 1992
  13.     1.01 27th April 1992 -- American release
  14.     1.02  1st May   1992 -- Corrected uninitted ptr bug
  15.     1.03                 -- Std openings under development
  16.     1.04  22nd May  1992 -- Corrected EGA only bug,
  17.     1.05  27th May  1992 -- Better Security score, added Tense_Aggro
  18.     1.06  30th May  1992 -- Solid colours, -mono option added.
  19.     1.07  31st May  1992 -- Release for LIBRERIA ATALA.
  20.     1.08   5th June 1992 -- Game end message, who won what.
  21.     1.09   8th June 1992 -- As sent to Mr.Watkins, Gloucester Museum.
  22.     1.1   20th June 1992 -- Another release for ATALA, def=Italiano.
  23.     1.11  27th June 1992 -- Jamie and Fred release, ESC from menu too.
  24.     1.1X  working on doubling cube...
  25.     1.2   30th Oct  1992 -- Got rid of protection, still no doubling
  26.     1.2X  working on the doubling cube...
  27.     2.01  6-Feb-1993 With doubling cube, sent to Dossena
  28.     2.03  Better 'constructor' scoring in BG_EVAL.C
  29.     2.04  Trying to get him to shift trailing pieces faster
  30.     2.10  31-Oct-1993, More genetics training
  31.     2.11  Does not reject double at start of game
  32.     2.20  STDOP 5,1 corrected
  33.     2.25  Getting a 12 neuron neural network to play too.
  34.     2.3   14th May 1994, NN plays badly, removed it.
  35.     2.31  25th March 1994, TD-Gammons openings for 4,1 and 2,1 in BG_STDOP.C
  36. */
  37.  
  38. #define DEBUG_SOURCE TRUE  /* Set to FALSE ten years from now */
  39. #define DRODBAR      0     /* Always 0, used to exclude unwanted source */
  40.  
  41. /***** Generally useful types and constants *****/
  42.  
  43. typedef unsigned char  uchar ;
  44. typedef unsigned long  ulong ;
  45. typedef unsigned short ushort ;
  46. typedef short          boolean ;
  47. typedef unsigned int   uint ;
  48.  
  49. #define TRUE            1
  50. #define FALSE           0
  51. #define SAME_STRING     0   /* for strcmpx functions */
  52. #define NUL       (char)0   /* String terminator */
  53. #define EVEN(a) (((a/2)*2)==a)
  54. #define GERR_LEN     1024   /* Length of global error string */
  55.  
  56.  
  57. /***** Describe a board *****/
  58.  
  59. #define N_PLAYERS       2
  60. #define GRID_COLS      14   /* 12 points + the bar + home */
  61. #define GRID_ROWS      12   /* Space for 6 pieces         */
  62. #define BAR_COL         7   /* The 7th column is the bar  */
  63. #define DOUBLE_ROW   (GRID_ROWS/2)
  64. #define HOME_COL        0   /* The zeroth column is home  */
  65.  
  66. #define XI              0  /* X_Coord index */
  67. #define YI              1  /* Y_Coord index */
  68. #define TWOD_COORDS     2  /* There are 2   */
  69.  
  70. #define Reverse_Index(a) ((N_PLACES-1)-(a)) /* To go from an index on the
  71.         black layout to an index on the white layout and vice versa */
  72.  
  73. typedef short Player_t ;
  74. #define BLACK_PLAYER   0
  75. #define WHITE_PLAYER   1
  76. #define NULL_PLAYER    2
  77. #define OPPONENT(p) (p==BLACK_PLAYER) ? WHITE_PLAYER : BLACK_PLAYER
  78.  
  79. #define N_POINTS      24
  80. #define N_PLACES (N_POINTS+2)   /* 24 points, home and the bar */
  81. #define BAR_I           0
  82. #define POINT1_I        1
  83. #define POINT24_I      24
  84. #define HALF_POINT_I   13
  85. #define HOME_I         25
  86. #define MAX_MOVES       4  /* At most a player can move 4 pieces */
  87. #define WORST_SCORE   (-1) /* So all scores are longs and +ve */
  88. #define N_PIECES       15  /* Per player of course */
  89. #define NOT_VALID_END (-1) /* Cannot move to here code */
  90.  
  91. typedef char Layout_t [N_PLACES] ; /* One layout for each player */
  92.  
  93.  
  94. /***** Points for the different types of winning game *****/
  95.  
  96. #define NO_WIN     0
  97. #define SIMPLE     1
  98. #define GAMMON     2
  99. #define BACKGAMMON 3
  100.  
  101.  
  102. /***** Transit_t, used to describe a move *****/
  103.  
  104. typedef struct {
  105.     Layout_t Layout ;                 /* The new layout after the transition */
  106.     short    N_Moves ;                /* 0..4 moves to get to new layout */
  107.     short    Old_Points [MAX_MOVES] ; /* Where the piece was */
  108.     short    Places_Movd[MAX_MOVES] ; /* Places moved, can be negative */
  109.     short    Old_Row    [MAX_MOVES] ; /* The level of the old pos of piece */
  110.     short    New_Row    [MAX_MOVES] ; /* The level of the new pos of piece */
  111. } Transit_t ;
  112.  
  113.  
  114. /***** The Search_t type *****/
  115.  
  116. typedef enum {
  117.     Bestest,  /* Search for best legal move */
  118.     Legalest  /* Search for the most legal move only */
  119. } Search_t ;
  120.  
  121.  
  122. /***** Some colour definitions *****/
  123.  
  124. #define BLACK   0
  125. #define BLUE    1
  126. #define GREEN   2
  127. #define CYAN    3
  128. #define RED     4
  129. #define GREY    7
  130. #define WHITE  15
  131.  
  132. /***** Framed_Center_String operations *****/
  133.  
  134. typedef enum {
  135.     OVERWRITE = 0 ,
  136.     PUSH      = 1
  137. } FCS_Op_t ;
  138.  
  139. /***** Definition of Speed_t, how fast to update the screen *****/
  140.  
  141. typedef enum {
  142.     PAUSING     = 0,   /* Hit key after a transit */
  143.     SLOW_SPEED  = 1,   /* Transits and a delay */
  144.     MED_SPEED   = 2,   /* Transits shown */
  145.     FULL_SPEED  = 3    /* No transits shown */
  146. } Speed_t ;
  147.  
  148.  
  149. /***** These are used to plot semicircles of motion *****/
  150.  
  151. #define PI      ((double)3.1416)
  152. #define TWO_PI  ((double)2.0*PI)
  153. #define NSC_SEGS         25
  154. #define NSC_POINTS (NSC_SEGS+1)
  155. #define DELTA_ANGLE (PI/NSC_SEGS)  /* +ve = anticlockwise */
  156.  
  157.  
  158. /***** Define the TEXT area sizes, postitions and so on *****/
  159.  
  160. #define SIDE_ROWS     14   /* This is the size in characters...  */
  161. #define SIDE_COLS     16   /* ...of the side text area.          */
  162. #define HELP_ROWS      1   /* The number of cols is whatever is left */
  163.  
  164. /* Graphical margin around text menus, should be an even number */
  165. #define MARGIN    4
  166.  
  167. /* Position of text strings on title page */
  168. #define TITLE_BG_ROW    1
  169. #define TITLE_SWS_ROW   4
  170. #define TITLE_VER_ROW   7
  171. #define TITLE_LOGO_ROW 10
  172. #define TITLE_LOGO_DIV  6
  173.  
  174. /* Placement of statistics */
  175. #define ID_ROW       0                /* Black and White ids */
  176. #define TOTALM_ROW   1                /* Total Message row */
  177. #define TOTALN_ROW   (TOTALM_ROW+1)   /* Total Number row */
  178. #define DOUBM_ROW    4
  179. #define DOUBN_ROW    (DOUBM_ROW+1)
  180. #define POINTSM_ROW  7
  181. #define POINTSN_ROW  (POINTSM_ROW+1)
  182. #define TARGETM_ROW  9
  183. #define TARGETN_ROW  (TARGETM_ROW+1)
  184. #define OPP_ROW      (POINTSN_ROW+5)  /* "OPPONENT" */
  185. #define NUM_WIDE  8
  186. #define OFFSET    4   /* End of field name text */
  187.  
  188. #define THREAT_ROW   (STATS_ROW + 8)
  189.  
  190. /***** The message type, what and how they are *****/
  191.  
  192. #define MESS_CHARS  64   /* Max number of message chars exc NUL */
  193. #define N_LANGS   2
  194. #define ENG_LANG  0
  195. #define ITA_LANG  1
  196.  
  197. typedef struct {
  198.     char     Message [N_LANGS][MESS_CHARS+1] ;
  199.     char     Area ;
  200.     char     Row,Col ;
  201.     short    Sound ;    /* If 0 no sound, else the freq of the sound */
  202.     FCS_Op_t Op ;
  203. } Mesg_t ;
  204.  
  205.  
  206. #define STAT_MSG          0
  207. #define ID_MSG            1
  208. #define TOTAL_MSG         2
  209. #define DOUBLE_MSG        3
  210. #define POINTS_MSG        4
  211. #define HELP_MSG          5
  212. #define HIT_MOUSE_MSG     6
  213. #define SETUP_MSG         7
  214.  
  215. #define MAIN_SETUP_MSG    8
  216. #define FIRST_MAIN_MSG    MAIN_SETUP_MSG
  217. #define MAIN_PLAY_MSG     9
  218. #define MAIN_EXIT_MSG    10
  219. #define LAST_MAIN_MSG    MAIN_EXIT_MSG
  220.  
  221. #define MENU_HELP_MSG    11
  222. #define CANT_START_MSG   12
  223. #define CANT_END_MSG     13
  224. #define SEL_STA_MSG      14
  225. #define SEL_END_MSG      15
  226. #define CLK_GO_MSG       16
  227. #define B_NOGO_MSG       17
  228. #define W_NOGO_MSG       18
  229. #define CTLC_MSG         19
  230. #define INIT_DICE_MSG    20
  231. #define THROW_DICE_MSG   21
  232. #define HAKTOC_MSG       22
  233. #define DBL_MSG          23
  234. #define DBL_LIM_MSG      24
  235. #define ACC_DBL_MSG      25
  236. #define COM_REJ_MSG      26
  237. #define COM_ACC_MSG      27
  238. #define YOU_ACC_MSG      28
  239. #define WHT_PROP_DBL_MSG 29
  240. #define BLK_PROP_DBL_MSG 30
  241. #define WHT_REJ_DBL_MSG  31
  242. #define BLK_REJ_DBL_MSG  32
  243. #define WHT_ACC_DBL_MSG  33
  244. #define BLK_ACC_DBL_MSG  34
  245. #define NO_CUBE_MSG      35
  246. #define PLAY_TO_MSG      36
  247. #define COM_WINS_SET_MSG 37
  248. #define YOU_WIN_SET_MSG  38
  249.  
  250. #define N_MESGS          39
  251.  
  252. /* Some text defines which should really be variables... */
  253. #define LAST_ROW 24 /* Horrid ! */
  254. #define MID_COL  40 /* Horrid ! */
  255.  
  256.  
  257. /* MAIN menu */
  258. #define MAIN_MENU_ROWS   (LAST_MAIN_MSG - FIRST_MAIN_MSG + 1)
  259. #define MAIN_MENU_ROW    (LAST_ROW - MAIN_MENU_ROWS)
  260. #define MAIN_COLS_WIDE   20
  261. #define MAIN_MENU_COL    (MID_COL - (MAIN_COLS_WIDE/2))
  262. #define HELP_KEY     F1_KEY
  263. #define SETUP_KEY    F3_KEY
  264. #define PLAY_KEY  ENTER_KEY
  265.  
  266. /* SETUP menu */
  267. #define N_SETUP_FIELDS         6
  268. #define S_TITLE_ROW      (LAST_ROW - (N_SETUP_FIELDS+3))
  269. #define SETUP_ROW        (S_TITLE_ROW+1)
  270. #define LANG_FIELD             0
  271. #define SPEED_FIELD            1
  272. #define COL_FIELD              2
  273. #define OPP_FIELD              3
  274. #define TARG_FIELD             4
  275. #define THROW_FIELD            5
  276. #define FIELD_CHARS           12  /* Size of a field name or an option name */
  277. #define MAX_OPTIONS            4
  278. #define FIELD_COL      (SETUP_COL + FIELD_CHARS + 2)
  279. #define SETUP_COLS_WIDE ((MAX_OPTIONS+1)*FIELD_CHARS)
  280. #define SETUP_COL       (40 - (SETUP_COLS_WIDE/2))
  281.  
  282. /***** The structure for a string menu, used in SETUP menu *****/
  283.  
  284. typedef struct {
  285.     char Name [N_LANGS][FIELD_CHARS+1] ;
  286.     char Options [N_LANGS][MAX_OPTIONS][FIELD_CHARS+1] ;
  287.     char Selector ;          /* Which option selected now */
  288.     char N_Options ;         /* Length of option list */
  289.     char O_Width ;           /* Cols between start of options */
  290. } String_Menu_t ;
  291.  
  292.  
  293. /***** defines for opponents, see BG_USER1.C for names *****/
  294. #define SERGIO     0
  295. #define ENZO       1
  296. #define OWEN       2
  297. #define BRIAN      3  // The brain
  298. #define N_OPPS     4
  299.  
  300.  
  301. /* WEIGHTS menu */
  302. #define N_WEIGHTS    13
  303. #define MAX_WEIGHT  100
  304. #define N_W_FIELDS    (N_WEIGHTS * N_PLAYERS)
  305. #define N_W_ROWS      (N_W_FIELDS + 1)
  306. #define W_TITLE_ROW    4
  307. #define W_TOP         (W_TITLE_ROW + 1)
  308. #define W_STRSIZE    30  /* num chars to describe a weighting function */
  309. #define W_NUM_COL     (W_LEFT + W_STRSIZE + 1)
  310. #define W_FIELD_SIZE    4
  311. #define W_COLS_WIDE    (W_STRSIZE+W_FIELD_SIZE+1)
  312. #define W_LEFT       (40 - (W_COLS_WIDE/2))
  313.  
  314.  
  315. /***** Layout Selector Type *****/
  316.  
  317. typedef struct {
  318.     long     Moves_Made ; /* Comes first in selecting which move */
  319.     long     Goodness   ; /* Equally legal moves use this as a selector */
  320. } Lay_Sel_t ;
  321.  
  322.  
  323. /***** Statistics structure *****/
  324.  
  325. typedef struct {
  326.     ushort Total ;      /* Total score of the player so far, with doubles */
  327.     ushort Doubles ;    /* Number of doubles thrown by the player */
  328.     ushort N_Throws ;   /* Number of times the two dice thrown */
  329.     ushort Games_Won ;
  330. } Stats_t ;
  331.  
  332. #define MIN_ROLLS  5
  333. #define MAX_ROLLS  25
  334. typedef struct {
  335.     char N_Vals ;    /* 2 or 4 if double */
  336.     char Values[MAX_MOVES] ; /* List of values, e.g. [1,3] or [4,4,4,4] */
  337. } Dice_t ;
  338.  
  339. /* Are the die thrown by the computer or by the human ? */
  340. typedef enum {
  341.     AUTO_THROW,MANUAL_THROW
  342. } Throw_t ;
  343.  
  344. typedef struct {
  345.     short Text_X,Text_Y ;           /* Top left pixel of text area */
  346.     short Dice_Area_X,Dice_Area_Y ; /* Top left pixel of Dice_Area area */
  347.     short Text_Wide,Text_High ;     /* In pixels */
  348.     short Help_X,Help_Y ;           /* Top left pixel of help area */
  349.     short Help_Wide,Help_Cols ;     /* Height is always 1 char */
  350.     short Board_X,Board_Y ;         /* Top left pixel of board area */
  351.     short Board_Wide,Board_High ;   /* Pixel size, inclusive */
  352.     short Logo_X,Logo_Y ;           /* Top left pixel of logo area */
  353.     short Logo_Wide,Logo_High ;     /* Pixel size, inclusive */
  354.     short Logo_Center ;             /* Pixel X_Center of logo area */
  355.     short Grid_Wide,Grid_High ;     /* A unit positioner on the board */
  356.     short Unit_Wide,Unit_High ;     /* 4 pixels less than the above */
  357.     short Double_X,Double_Y ;       /* Cell for the doubling button */
  358. } Screen_Const_t ; /* Const coz initialised and then never changed */
  359.  
  360. typedef struct {
  361.     short   X_Pixels,Y_Pixels   ;
  362.     short   Aspect_H, Aspect_V  ; /* See README.C for explanation */
  363.     short   Char_Wide,Char_High ;
  364.     short   Text_Rows,Text_Cols ;
  365.     boolean Colour ;
  366. } Disp_Cfg_t ;
  367.  
  368.  
  369. /***** Keyboard code defines *****/
  370.  
  371. #define FUN_PREFIX  0
  372. #define UP_KEY     72
  373. #define DN_KEY     80
  374. #define LF_KEY     75
  375. #define RT_KEY     77
  376. #define F1_KEY     59
  377. #define F2_KEY     60
  378. #define F3_KEY     61
  379. #define F4_KEY     62
  380. #define F5_KEY     63
  381. #define F6_KEY     64
  382. #define F9_KEY     67
  383. #define F10_KEY    68
  384. #define ENTER_KEY  13
  385. #define BACK_KEY    8
  386. #define ESC_KEY    27
  387.  
  388.  
  389. /***** Function prototypes *****/
  390.  
  391. /* BG.C */
  392. void    main (int argc, char * argv[]) ;
  393. boolean Play_The_Game (Speed_t Speed, Player_t Human, short O_Index) ;
  394. void    Select_Starter (Player_t* Player, Dice_t* Dice) ;
  395. void    Seconds_Delay (short seconds) ;
  396. void    Record_Move (Player_t Ply, Dice_t* Di, Layout_t Blk, Layout_t Wht) ;
  397. void    Print_Layouts (Layout_t B, Layout_t W) ;
  398. void    Print_Layout (Layout_t Layout, Player_t Player) ;
  399. void    Test_Move (void) ;
  400.  
  401. /* BG_CDPNT.C */
  402. void  Go_Graph_Mode (void) ;
  403. void  Go_Text_Mode (void) ;
  404. void  Get_Display_Config (Disp_Cfg_t* Cfg) ;
  405. void  Draw_Line (short x0, short y0, short x1, short y1, short Col) ;
  406. void  Draw_Rect (short x0, short y0, short Wide, short High, short Col) ;
  407. void  Fill_Rect (short x0, short y0, short Wide, short High, short Col) ;
  408. void  Fill_Poly (short N_Points, short* Points, short Colour);
  409. void  Draw_Point (short x, short y, short c) ;
  410. void  Set_Solid_Fill_Style (void) ;
  411. void  Draw_Ellipse (short x, short y, short X_r, short Y_r, short Col) ;
  412. void  Fill_Ellipse (short X_Cen, short Y_Cen, short X_Rad, short Y_Rad, short Col) ;
  413. void  Graf_Text (short Row, short Col, char* String, short Color) ;
  414. void  Text_At_Pixel (short x, short y, char* String, short Col) ;
  415. void  Error_Exit (char* Last_Words) ;
  416. void  Init_Rannum_Gen (void) ;
  417. void  Randomise (void) ;
  418. int   Int_Rand_Range (int least, int most) ;
  419. void  Set_Ctl_C_Handler (void) ;
  420. void  Ctl_C_Handler (void) ;
  421.  
  422. /* BG_DICE.C */
  423. Dice_t Throw_Dice (Player_t Pl, Player_t Op, Player_t Hu,
  424.                    boolean* Doubled, boolean* Rejected,
  425.                    Layout_t Curr_Lay[2]) ;
  426. Dice_t Computer_Throws_Dice (Player_t George) ;
  427. Dice_t Human_Throws_Dice (Player_t First, Player_t Second) ;
  428. void   Init_Stats (void) ;
  429. void   Copy_Dice (Dice_t* Dest, Dice_t* Source) ;
  430. void   Deplete_Dice_Pool (Dice_t* Dice, ushort Index) ;
  431.  
  432. /* BG_DOUBL.C */
  433. boolean Human_Doubles (Player_t Player) ;
  434. boolean Computer_Doubles (Player_t Player, Layout_t Curr_Lay[2]) ;
  435. boolean Human_Rejects_Double (void) ;
  436. boolean Computer_Rejects_Double (Player_t Player, Layout_t Curr_Lay[2]) ;
  437.  
  438. /* BG_EVAL.C */
  439. long    Aggression_Score (Layout_t Me, Layout_t Him) ;
  440. boolean Overlap (Layout_t Me, Layout_t Him) ;
  441. short   Pip_Count (Layout_t Layout) ;
  442. short   Pip_Count_Diff (Layout_t Me, Layout_t Him) ;
  443. long    Pip_Count_Score (Layout_t Me, Layout_t Him) ;
  444. short   Total_Pieces_On_Board (Layout_t Me, Layout_t Him) ;
  445. short   Pieces_On_Board (Layout_t Layout) ;
  446. void    Edit_Weights (void) ;
  447. void    Draw_Weight (ushort Rw, char* Ds, ushort Nm, ushort Cl, Player_t p) ;
  448. long    Evaluate_Move (Layout_t Me, Layout_t Him, Player_t Player) ;
  449. void    Setup_Weights (short New_Opponent, Player_t Player) ;
  450. void    Init_Genetic_Opponents (short Black, short White) ;
  451. void    Print_Eval_Stats (void) ;
  452.  
  453. /* BG_EVAL2.C */
  454. boolean Propose_The_Double (Player_t Player, Layout_t Layout[2]) ;
  455. boolean Reject_The_Double (Player_t Player, Layout_t Layout[2]) ;
  456.  
  457. /* BG_FACE.C */
  458. void Init_Faces (void) ;
  459. void Pixel_Transform (short* x, short* y) ;
  460. void Draw_Eyes (short N_Vals, short o) ;
  461. void Draw_Face_Outline (short Face, short Col) ;
  462. void Redraw_Mouth (short o, short S_Val, short T_Val) ;
  463. void Draw_Mouth (short o, short S_Val, short T_Val, short Colour) ;
  464. void Redraw_Eyebrows (short o, short Eb_Val) ;
  465. void Draw_Eyebrows (short o, short Eb_Val, short Colour) ;
  466. void Draw_Face (Layout_t Me, Layout_t Him, short o) ;
  467. void Show_Opponents_Face (Layout_t Lays[2], Player_t Hum, short O_Ind);
  468.  
  469. /* BG_GENES.C */
  470. void  Genetic_Selection (void) ;
  471. void  Read_Weights (long Weights[N_OPPS][N_WEIGHTS]) ;
  472. void  Write_Weights (long Weights [N_OPPS][N_WEIGHTS], short Pos[N_OPPS]) ;
  473. void  Reinforce_Or_Shuffle (short Deltas[N_WEIGHTS], short Pos, short Old_Pos) ;
  474. void  Randomise_Deltas (short Deltas[N_WEIGHTS], short Position) ;
  475. void  Remake_Weights (long Weights[N_WEIGHTS], short Deltas[N_WEIGHTS]);
  476. void  Tournament (short Pos[N_OPPS]);
  477. short Get_Winner (short Black, short White) ;
  478.  
  479. /* BG_GMOV.C */
  480. void Draw_Transits (Transit_t* Me, Transit_t* Hm, Player_t Plyr) ;
  481.  
  482. /* BG_GRAF1.C */
  483. void Init_Graphics (void) ;
  484. void Get_Grid_Corner (short* X, short* Y, short Col, short Row) ;
  485. void Get_Grid_Center (short* X, short* Y, short Col, short Row) ;
  486. void Go_Graphics (int V_Mode) ;
  487. void Draw_Dice_Pair (Dice_t* Pair, Player_t Player) ;
  488. void Draw_Die (short Value, short Dice_Num, Player_t Player) ;
  489. void Clear_Die (short Dice_Num) ;
  490. void Draw_Stats (void) ;
  491. void Side_Number (ushort Row, ushort Col, ushort Number,
  492.                   ushort F_Size, ushort Color) ;
  493. void Clear_Side_Line (ushort Row) ;
  494. void Graf_Number (ushort Row, ushort Col, ushort Number,
  495.                   ushort F_Size, ushort Color) ;
  496. void Init_And_Draw_Logo (void) ;
  497. void Clear_Logo_Area (void) ;
  498. boolean Even (short Number) ;
  499. void Show_Dice_List (Dice_t* Dice) ;
  500.  
  501. /* BG_GRAF2.C */
  502. void Get_Pbox_Coords (short    Box_Coords[2][2],
  503.                       Player_t Player, short Point_Num) ;
  504. void Draw_Board_Full  (Layout_t Layouts[N_PLAYERS]) ;
  505. void Draw_Board_Quick (Layout_t Black, Layout_t White) ;
  506. void Clear_Point (Player_t Player, short Point_Num) ;
  507. void Get_Piece_Center (short* X_Center, short* Y_Center, Player_t Player,
  508.                        short Point_Num, short Piece_Row, short Tot_Pieces,
  509.                        short Available_Rows) ;
  510. char Show_Transits_And_Kb_Look (Transit_t* Me, Transit_t* Hm,
  511.                                 Player_t Plr, Speed_t Spd) ;
  512. void Side_Text (short Row, short Col, char* String, short Color)  ;
  513. void Help_Text (short Col, char* String, short Color) ;
  514. void Clear_Help_Line (void) ;
  515. boolean Pixel_To_Grid (short* Col, short* Row, short x, short y) ;
  516. short Grid_To_Point (short G_Col, short G_Row, short Player) ;
  517.  
  518. /* BG_GRAF3.C */
  519. void Title_Page (void) ;
  520. void Framed_Center_String (char* String, short Row, FCS_Op_t Operation) ;
  521. void Erase_Framed_String (void) ;
  522. void Clear_Screen (void) ;
  523. void Draw_Prob_Diag (char Disp[6][6]) ;
  524. void Draw_Pline (short N_Points, short Line[][2], short Col) ;
  525. void Draw_Pgon (short N_Points, short Line[][2], short Col) ;
  526. void Draw_Double_Button (void) ;
  527. void Draw_Double_Cube (Player_t Possesor, short Number) ;
  528.  
  529. /* BG_MESG.C */
  530. void Print_Message (ushort Message_Number) ;
  531. void Print_Players (short Opponent, Player_t Human) ;
  532. void Print_Opponents (short Black, Player_t White) ;
  533. void Print_Tournament (short T_Num, short Pos[N_OPPS]) ;
  534. void Show_Winner (Player_t Wnr, Player_t Man, short Points) ;
  535.  
  536. /* BG_MOVE.C */
  537. void Initial_Board (Layout_t Layouts[2]) ;
  538. void Select_Best_Move (Dice_t*    The_Dice,
  539.                        Layout_t   Mine_Old,   Layout_t   His_Old,
  540.                        Transit_t* My_Best_Tr, Transit_t* His_Best_Tr,
  541.                        Player_t   Player,     Search_t   s) ;
  542. void Select_Best_2Dice_Move (Dice_t*    The_Dice,
  543.                              Transit_t* My_Old_Tr,  Transit_t* His_Old_Tr,
  544.                              Transit_t* My_Best_Tr, Transit_t* His_Best_Tr,
  545.                              Player_t   Player) ;
  546. void Select_Best_Ndice_Move (Dice_t*    Dice_List,  short      This_Dice,
  547.                              Transit_t* My_Curr_Tr, Transit_t* His_Curr_Tr,
  548.                              Transit_t* My_Best_Tr, Transit_t* His_Best_Tr,
  549.                              Lay_Sel_t* Best_Score, Player_t   Player,
  550.                              Search_t   s) ;
  551. void    Choose_Move (Transit_t* Mine,    Transit_t* His,
  552.                      Player_t   Player,  short Moves_Done,
  553.                      Transit_t* My_Best, Transit_t* His_Best,
  554.                      Lay_Sel_t* Best,    Search_t s) ;
  555. void    Execute_Move (char p, char Die, Transit_t* Mine, Transit_t* His) ;
  556. boolean Can_Move (char p, char Die, Layout_t Me, Layout_t Him) ;
  557. void    Copy_Layout (Layout_t Dst, Layout_t Src) ;
  558. boolean Bearing_Off (Layout_t Lay) ;
  559. short   Won (Layout_t Me, Layout_t Him) ;
  560. boolean Pieces_Behind (Layout_t Me, short p) ;
  561. void    Check_Layout (Layout_t Layout, char* Err_Mess) ;
  562. void    Copy_Transit (Transit_t* Dest, Transit_t* Source) ;
  563. void    Init_Transit (Transit_t* New, Layout_t Old) ;
  564. boolean Move_Possible (Layout_t P_Lay, Layout_t O_Lay) ;
  565.  
  566. /* BG_STDOP.C */
  567. boolean Standard_Opening (Dice_t*    The_Dice,
  568.                           Transit_t* My_Old_Tr,  Transit_t* His_Old_Tr,
  569.                           Transit_t* My_Best_Tr, Transit_t* His_Best_Tr) ;
  570.  
  571. /* BG_USER1.C */
  572. void    Setup (Speed_t* Speed, Player_t* Human, short* Opponent) ;
  573. boolean Top_Level_Interact (Speed_t* Speed, Player_t* Human, short* Op) ;
  574. void    Top_Level_Menu (boolean Draw) ;
  575. void    Draw_Field (ushort Field, String_Menu_t* Item, ushort Colour) ;
  576. int     Get_Key (void) ;
  577. void    Help (void) ;
  578. boolean First_Interaction (Speed_t* Speed, Player_t* Man, short* Op) ;
  579. short   Get_Vmode (void) ;
  580. void    Protect (void) ;
  581. void    Decode (uchar* String, ushort* Shorts, ushort Checksum) ;
  582. void    Make_Key (char* Key, char* Resp) ;
  583. ushort  Get_Check_Sum (uchar* String) ;
  584. void    Demask (char* String) ;
  585. void    Decode_And_Show_Titles (void) ;
  586. void    Show_Titles (void) ;
  587.  
  588. /* BG_USER2.C */
  589. char User_Selects_Move (Dice_t* Dice, Layout_t Mine, Layout_t His_Old,
  590.                         Transit_t* My_Best_Tr, Transit_t* His_Best_Tr,
  591.                         Player_t   Player) ;
  592. short Get_User_Point_Choice (char* Key, Player_t p, short Shape) ;
  593. short Legal_Start (Transit_t* Me, Transit_t* Him, Dice_t* Dice, short Point,
  594.                    short End_Points[MAX_MOVES], short D_I_List[MAX_MOVES]) ;
  595. short Legal_End (short Point, short List[MAX_MOVES], short N_Ends) ;
  596. void  Update_User_Move (Layout_t User, Layout_t Comp, Player_t Player) ;
  597. void  Init_Human_Vars (short*  Moves_Made, Dice_t* Pool, Dice_t* Dice,
  598.                        Transit_t* Loc_User, Transit_t* Loc_Comp,
  599.                        Layout_t   User_Old, Layout_t   Comp_Old) ;
  600. void  User_Error_Exit (void) ;
  601. void  Show_Threat (Layout_t Me, Layout_t Him, short Point) ;
  602. short Key_And_Delay (short Seconds) ;
  603.